/**
 * 
 */
package Grupo1;


/**
 * @author rvl
 *
 */
public class Pilha {
	
	private int tamanho    = 0;
	private No topo        = null;
	private int capacidade = 0;
	
	public void push(No no){
		no.setProximo( topo );
		topo = no;
		tamanho++;
	}

	public No pop() {
		if( isEmpty() ){
			return null;
		}else{
			tamanho--;
			No no = getTopo();
			topo = no.getProximo();
			return no;
		}
	}
	
	public boolean isEmpty(){
		return (topo == null) ? true : false;
	}
	
	public void ordernar(){
		Pilha ord = new Pilha();
		Pilha nOrd = new Pilha();
		int tam_ord = 0;
		
		do{
			
			/*ordena os elementos da pilha*/
			while( !isEmpty() ){
				
				if( ord.getTopo() == null )
					ord.push( pop() );
				else{
					if( topo.getValor().compareTo( ord.getTopo().getValor() ) >= 0 ){
						ord.push( pop() );
					}else{
						nOrd.push( pop() );
					}
				}
			}
			
			tam_ord = ord.getTamanho();
			
			/*preeche a pilha com dados ordenados*/
			while( !ord.isEmpty() )
				push( ord.pop() );
			
			/*preeche a pilha com dados not-ordenados*/
			while( !nOrd.isEmpty() )
				push( nOrd.pop() );
			
		}while( getTamanho() != tam_ord );
	}
	
	public String exibirPilha(){
		String out = "";
		while( !isEmpty() )
			out += pop().getValor()+"\n";
		
		return out;
	}
	
	public void preencher(String dados[]){
		No no;
		for(int i=0; i < dados.length; i++){
			no = new No();
			no.setValor(dados[i]);
			push(no);
		}
		capacidade = dados.length;
	}
	
	public No getTopo() {
		return topo;
	}

	public void setTopo(No topo) {
		this.topo = topo;
	}

	public int getCapacidade() {
		return capacidade;
	}

	public void setCapacidade(int capacidade) {
		this.capacidade = capacidade;
	}

	public int getTamanho() {
		return tamanho;
	}

	public void setTamanho(int tamanho) {
		this.tamanho = tamanho;
	}

}
